package com.tuijian.util;

import com.tuijian.vo.CellData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
public class FilterImpl implements FilterInterface {
    @Resource
    private HbaseUtils hbaseUtils;

    /**自定义过滤方法，从用户行为日志中过滤数据
     * 用户请求帖子列表时：标记不喜欢作者和帖子内容的帖子不会推荐
     * 用户请求商品列表时：三天内购买的商品不会重复推荐
     * @param userId 查询用户id
     * @param dataType 查询数据类型：1-查询商品  0-查询帖子
     * @return List<String> 返回需要过滤掉的商品或帖子列表
     * @throws Exception
     */
    @Override
    public List<String> filter(String userId, String dataType) throws Exception {
        List<String> excludeList=new ArrayList<String>();
        List<CellData[]> resList = null;
        resList=hbaseUtils.filter("behavior_log","info","userId","=",userId,true,"info","type","=",dataType,true);
        if ("0".equals(dataType)){
            for(CellData[] arr : resList){
                for(CellData item : arr){
                    //用户标记不喜欢作者和帖子内容的帖子不会推荐
                    if ("event_type".equals(item.getQualifier())){
                        String eventType=(String)item.getValue();
                        if (!"3".equals(eventType) && !"4".equals(eventType)){
                            break;
                        }
                    }
                    List<String> tmpList=null;
                    if("itemId".equals(item.getQualifier())){
                        String rawList=(String)item.getValue();
                        tmpList = Arrays.asList(rawList.substring(1, rawList.length() - 1).split(", "));
                        excludeList.addAll(tmpList);
                        break;
                    }

                }
            }
        }else if ("1".equals(dataType)){
            for(CellData[] arr : resList){
                for(CellData item : arr){
                    if ("event_type".equals(item.getQualifier())){
                        String eventType=(String)item.getValue();
                        if (!"6".equals(eventType)){
                            break;
                        }
                    }
                    //三天内购买的商品不会重复推荐
                    if("trigger_time".equals(item.getQualifier())){
                        String trigger_time=(String)item.getValue();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        if(new Date().getTime()-sdf.parse(trigger_time).getTime()>1000*60*60*24*3){
                            break;
                        }
                    }
                    if("itemId".equals(item.getQualifier())){
                        String rawList=(String)item.getValue();
                        excludeList.add(rawList.substring(1, rawList.length() - 1));
                        break;
                    }
                }
            }
        }
        return excludeList;
    }
}
